在使用者透過 UITextField
輸入顏色值時,我們必須限制其只能輸入數字,以避免輸入到其他不正確的文字內容(如字母或符號)。這需要透過實作 UITextFieldDelegate
來控制使用者的輸入。
我們將透過一個 UITextFieldDelegate
的擴展來實現這個功能,並在textField(_:shouldChangeCharactersIn:replacementString:)
方法中進行數字的限制。
MainViewController
並實作 UITextFieldDelegate:
ViewController
中擴展 UITextFieldDelegate
並實作方法。extension MainViewController: UITextFieldDelegate {
func textField(_ textField:UITextField,shouldChangeCharactersIn range:NSRange,replacementString string:String) -> Bool{
}
}
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
// 獲取輸入字串的長度
let len = string.lengthOfBytes(using: String.Encoding.utf8)
// 檢查每一個字元是否為數字
for i in 0..<len {
let char = (string as NSString).character(at: i)
if char < 48 || char > 57 { // ASCII 48 是 '0', 57 是 '9'
textField.text = "0" // 若輸入非數字,將文字設為 0
return false // 阻止非數字的輸入
}
}
return true // 允許數字的輸入
}
Delegate
:UITextFieldDelegate
的方法生效,需要將 ViewController
設置為 UITextField
的代理。在 viewDidLoad()
方法中,添加如下代碼:override func viewDidLoad() {
super.viewDidLoad()
// 設定 UITextField 的 delegate
txfRed.delegate = self
txfGreen.delegate = self
txfBlue.delegate = self
}
使用 UITextFieldDelegate 來限制使用者的輸入,這樣可以避免輸入非法字符,確保顏色值的正確性。透過簡單的 ASCII 碼判斷,我們可以方便地限制輸入的範圍。下一步將加入進一步的驗證,例如限制顏色值的範圍在 0 到 255 之間。